// 存储登录信息
import { login, getUserInfo, getUserDetailById } from '@/api/user'
import * as auth from '@/utils/auth'
import { resetRouter } from '@/router'

export default {
  namespaced: true,
  state: {
    token: auth.getToken() || '',
    UserInfo: {} // 不能设置为null，因为我们会在getters中引用userinfo的变量，则会引起异常和报错
  },
  mutations: {
    setToken (state, token) {
      state.token = token
      auth.setToken(token)
    },

    delToken (state) {
      state.token = ''
      auth.removeToken()
    },

    setUserInfo (state, res) {
      state.UserInfo = res
    },

    removeUserInfo (state) {
      state.UserInfo = {}
    }
  },
  actions: {
    // 退出登录
    logout (context) {
      // 删除token
      context.commit('delToken') // 不仅仅删除了vuex中的 还删除了缓存中的
      // 删除用户资料
      context.commit('removeUserInfo') // 删除用户信息
      // 重置路由
      resetRouter()
      // 设置权限模块下的路由为初始状态
      context.commit('permission/setRoutes', [], { root: true })
    },

    // 获取token
    async getTokenAction (context, loginForm) {
      const res = await login(loginForm)
      context.commit('setToken', res)
      // 设置登录时间戳
      auth.setTimeStamp()
    },

    // 获取用户资料
    async getUserInfo (context) {
      const res = await getUserInfo()
      // 获取用户详情
      const baseInfo = await getUserDetailById(res.userId)
      // 合并数据
      // const obj = { ...res, ...baseInfo }
      context.commit('setUserInfo', { ...res, ...baseInfo })
      return res // 为什么return ？ 这里给后期做权限留下伏笔
    }
  }

}
